package br.com.advance.automacao.model;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "TURNO")
@NamedQueries({@NamedQuery(name=Turno.BUSCAR_TURNO_PELO_HORARIO,
	query="select t from Turno t WHERE ((t.horaInicio <= :horaAtual and t.horaFim >= :horaAtual) OR "
			+ "(t.horaInicio > t.horaFim and (t.horaInicio <= :horaAtual OR t.horaFim >= :horaAtual))) AND t.ativo = 1 "),
			@NamedQuery(name=Turno.BUSCAR_TURNO_PELA_DATA_CLP, query="select DISTINCT t FROM Turno t join t.eventos e WHERE e.data = :data and e.clp.id = :idCLP" ),
			@NamedQuery(name=Turno.BUSCAR_POR_CODIGO, query="select DISTINCT t FROM Turno t WHERE t.codigo = :codigo" )})
public class Turno {

	public static final String BUSCAR_TURNO_PELO_HORARIO = "Turno.buscarTurnoPeloHorario";
	public static final String BUSCAR_TURNO_PELA_DATA_CLP = "Turno.BUSCAR_TURNO_PELA_DATA_CLP";
	public static final String BUSCAR_POR_CODIGO = "Turno.BUSCAR_POR_CODIGO";

	@Id
    @Column(name = "ID")
	@GeneratedValue
	private Long id;

	@Temporal(TemporalType.TIME)
	@Column(name = "HORA_INICIO")
	private Date horaInicio;

	@Temporal(TemporalType.TIME)
	@Column(name = "HORA_FIM")
	private Date horaFim;

	@Column(name = "CODIGO", nullable=false, columnDefinition="INT")
	private Integer codigo;

	@Column(name = "DESCRICAO", nullable=false, length=50, columnDefinition="VARCHAR")
	private String descricao;

	@Column(name = "ATIVO", nullable=false, columnDefinition="BIT")
	private Boolean ativo;

	@OneToMany(mappedBy="turno", fetch=FetchType.LAZY)
	private List<Evento> eventos;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Date getHoraInicio() {
		return horaInicio;
	}

	public void setHoraInicio(Date horaInicio) {
		this.horaInicio = horaInicio;
	}

	public Date getHoraFim() {
		return horaFim;
	}

	public void setHoraFim(Date horaFim) {
		this.horaFim = horaFim;
	}

	public Integer getCodigo() {
		return codigo;
	}

	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}

	public Boolean getAtivo() {
		return ativo;
	}

	public void setAtivo(Boolean ativo) {
		this.ativo = ativo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public List<Evento> getEventos() {
		return eventos;
	}

	public void setEventos(List<Evento> eventos) {
		this.eventos = eventos;
	}

}
